package com.yun.datastructure.linear.list.arraylist.leetcode;

/**
 * 977. 有序数组的平方
 * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
 */
public class Leetcode977 {
    public int[] sortedSquares(int[] nums) {
        int length = nums.length;
        int[] res = new int[length];
        if (nums[0] >= 0) {
            for (int i = 0; i < length; i++) {
                nums[i] *= nums[i];
            }
            return nums;
        }
        if (nums[length - 1] <= 0) {
            for (int i = 0; i < length; i++) {
                res[length - 1 - i] = nums[i] * nums[i];
            }
            return res;
        }
        for (int i = 0; i < length; i++) {
            nums[i] *= nums[i];
        }
        int p = 0;
        int q = length - 1;
        int k = length - 1;
        while (p <= q) {
            if (nums[p] < nums[q]) {
                res[k] = nums[q];
                q--;
            } else {
                res[k] = nums[p];
                p++;
            }
            k--;
        }
        return res;
    }
}
